#include "StdAfx.h"
#include "FactoryElementos.h"
#include "SapoFactory.h"
#include "FactoryCarril.h"
#include "FactoryFuente.h"
#include "SumideroFactory.h"
#include "Utilidades.h"
#include "DispersorFactory.h"

FactoryElementos::FactoryElementos(void)
{
}

vector<Elemento*> FactoryElementos::getListaElementos(vector<NodoXML> listaNodosElemento, Escenario* escenario)
{
	vector<Elemento*> listaElementos;
	vector<Elemento*>::iterator itAux;

	vector<NodoXML>::iterator itElementos;
	
	string buscar;
	bool encontrado = false;
	
	for(itElementos=listaNodosElemento.begin(); itElementos<listaNodosElemento.end(); itElementos++)
	{
		
		NodoXML nodoElemento=*itElementos;
		buscar = itElementos->nombre;
		for (itAux = listaElementos.begin(); itAux < listaElementos.end(); itAux++)
		{
			if ((*itAux)->GetId() == itElementos->getAttribute("id"))
			{
				encontrado = true;
			}

		};

		if ( encontrado == false)
		{
			if (Utilidades::sonStringsIguales(buscar ,"Sapo")){
				listaElementos.push_back(SapoFactory::getSapoInstance(&nodoElemento ,escenario));
			}else if (Utilidades::sonStringsIguales(buscar,"Sumidero")){
				listaElementos.push_back(SumideroFactory::getSumideroInstance(&nodoElemento,escenario));
			}else if (Utilidades::sonStringsIguales(buscar,"Fuente")){
				listaElementos.push_back(FuenteFactory::getFuenteInstance(&nodoElemento,escenario));
			}else if (Utilidades::sonStringsIguales(buscar,"Carril")){
				listaElementos.push_back(FactoryCarril::getCarrilInstance(&nodoElemento,escenario));
			}else if (Utilidades::sonStringsIguales(buscar,"Dispersor")){
				listaElementos.push_back(DispersorFactory::getDispersorInstance(&nodoElemento,escenario));
			}
		}else{
			encontrado = false;
			Log4Cpp::error("Id duplicado entre Elementos revisar XML.\n","FactoryElementos");
		}
	}
	return listaElementos;
}